package com.agile.leetcode.AESandRSAandMd5.bcrypt;

/**
 * @Author:ChenZhangKun
 * @Date: 2022/9/21 21:46
 */
public interface PasswordEncoder {
    /**
     * encode方法接受的参数是原始密码字符串，返回值是经过加密之后的hash值，hash值是不能被逆向解密的。这个方法通常在为系统添加用户，或者用户注册的时候使用。
     *
     * @param var1
     * @return
     */
    String encode(CharSequence var1);

    /**
     * matches方法是用来校验用户输入密码rawPassword，和加密后的hash值encodedPassword是否匹配。
     * 如果能够匹配返回true，表示用户输入的密码rawPassword是正确的，反之返回fasle。也就是说虽然这个hash值不能被逆向解密，
     * 但是可以判断是否和原始密码匹配。这个方法通常在用户登录的时候进行用户输入密码的正确性校验。
     *
     * @param var1
     * @param var2
     * @return
     */
    boolean matches(CharSequence var1, String var2);

    /**
     * upgradeEncoding设计的用意是，判断当前的密码是否需要升级。也就是是否需要重新加密？需要的话返回true，不需要的话返回fasle。默认实现是返回false。
     *
     * @param encodedPassword
     * @return
     */
    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}
